package com.igeek.oo;

import java.util.Scanner;

/**
 * 继承：
 *      H2O作为父类存在
 */
public class H2O {

    public void method(){
        System.out.println("我是H2O，父类，我表示一个水分子式");
    }

    private void flag(){
        System.out.println("这里是父类私有的方法");
    }
}

/**
 * 继承：
 *      Water作为H2O分子式的子类，是H2O分子式的液态形式
 */
class Water extends H2O{

    @Override
    public void method() {
        System.out.println("我是Water，子类，表示的是液态水 ");
    }
    public void detail(){
        System.out.println("子类独有的方法");
    }
}

/**
 * 继承：
 *      Ice作为H2O分子式的子类，是H2O分子式的固态形式
 */
class Ice extends H2O{

    @Override
    public void method() {
        System.out.println("我是Ice，子类，表示的是固态水 ");
    }
    public void detail(){
        System.out.println("子类独有的方法");
    }
}

/**
 * 继承：
 *      Steam作为H2O分子式的子类，是H2O分子式的固态形式
 */
class Steam extends H2O{
    @Override
    public void method() {
        System.out.println("我是Steam，子类，表示的是气态水 ");
    }

    public void detail(){
        System.out.println("子类独有的方法");
    }
}

class H2OTest{

    public static void main(String[] args) {
        /*
            根据用户输入的温度，创建不同的对象
         */
        System.out.println("请输入一个温度");
        Scanner scanner = new Scanner(System.in);

        int temperature = scanner.nextInt();

        /*
            使用多态的形式创建对象
            语法：
                父类的类型 对象名 = new 子类的类型();
            使用多态创建对象，本质还是 new 后面的对象，调用方法和属性时，
            是调用的子类中重写的父类的方法；如果子类没有重写，那么调用的就是父类中的方法了
            通过多态创建的对象，不能够再调用父类中私有的方法和属性
         */
        H2O h2O = null;

        if(temperature <= 0 ){
            h2O = new Ice();
        }else if(temperature > 0 && temperature < 100){
            h2O = new Water();
        }else{
            h2O = new Steam();
        }

        h2O.method();

//        h2O.flag();
    }
}